package com.cheng.example.book.advise151.chap3;


/**
 * 建议34：构造函数尽量简化
 *
 * 主要先执行的父类的无参构造器，
 * 执行的时候父类的里面的私有变量还没有配置，所以这个prot是0，
 * 或者那个静态常量40000
 */
public class Client34 {
    public static void main(String[] args) {
        Server s = new SimpleServer(1000);
    }
}

abstract class Server {
    public final static int DEFAULT_PORT = 40000;
    public Server() {
        // 获得子类提供的端口号
        int port = getPort();
        System.out.println("端口号：" + port);
        /* 进行监听动作 */
    }
    // 由子类提供端口号，并作可用性检查
    protected abstract int getPort();
}

class SimpleServer extends Server {
    private int port = 100;
    // 初始化传递一个端口号
    public SimpleServer(int _port) {
        port = _port;
    }
    // 检查端口是否有效，无效则使用默认端口，这里使用随机数模拟
    @Override
    protected int getPort() {
        return Math.random() > 0.5 ? port : DEFAULT_PORT;
    }
}